package view;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

import controller.SistemaTelefonia;

public class AltaLinea extends javax.swing.JFrame {

	private static final long serialVersionUID = 1L;

	private Vector<String> columnas = new Vector<String>();
	private String usuarioDni;
	private String[] labels = { "Usuario Dni", "Nombre", "Apellido",
			"Domicilio", "Telefono", "Numero Asignado" };

	private JButton alta;
	private SistemaTelefonia sistema;
	private NumeroView numeroLibreView;
	private Vector planes;
	private final JTable jTable1 = new JTable();	

	public AltaLinea() {
	}

	public AltaLinea(SistemaTelefonia s, String usuarioDni) {
		super();
		
		sistema = s;
		this.usuarioDni = usuarioDni;
		numeroLibreView = sistema.getPrimerNumeroLibre();
		if(numeroLibreView == null){
			JOptionPane.showMessageDialog(getContentPane(),"Ha surgido un error: en este momento no hay numeros libres para asignar.");
			dispose();
			return;
		}
			
		planes = sistema.getPlanes();		
		initGUI();
	}

	private void initGUI() {
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			getContentPane().setLayout(null);
			generateInputs();

			columnas.add("Plan Id");
			columnas.add("Nombre");
			columnas.add("Facturable");

			TableModel jTable1Model = new DefaultTableModel(planes, columnas);

			getContentPane().add(jTable1);
			getContentPane().add(jTable1.getTableHeader(), BorderLayout.NORTH);
			jTable1.setModel(jTable1Model);
			jTable1.setBounds(14, 14, 350, 189);
			jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
			jTable1.setLocation(new java.awt.Point(0, 4));		

			alta = new JButton();
			getContentPane().add(alta);
			alta.setText("Crear Nueva Linea");
			alta.setBounds(10,500, 200, 28);

			alta.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent evt) {
					try {						
						
						if (jTable1.getSelectedRow() < 0) throw new Exception("Debe seleccionar un plan!.");
						
						int planId = Integer.parseInt(jTable1.getValueAt(
								jTable1.getSelectedRow(), 0).toString());
						/*
						 	AltaLineaView altaLineaView = new AltaLineaView(
								usuarioDni, numeroLibreView.getNumeroId(), planId, Calendar.getInstance()
										.getTime());
						*/
						// te parece en vez de armar un altaLineaView mandar los datos?
						
						
						sistema.crearLinea(usuarioDni, numeroLibreView.getNumeroId(), planId, "");
						
						JOptionPane.showMessageDialog(getContentPane(),"La linea ha sido creada con exito");
						sistema.reloadData();
						setVisible(false);

					} catch (Exception e) {
						JOptionPane.showMessageDialog(getContentPane(),
								e.getMessage());

					}
				}
			});

			pack();
			setTitle("Alta de linea");
			setSize(400, 600);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private UsuarioView getUsuarioView(String dni) {
		return this.sistema.getUsuario(dni);
	}

	private void generateInputs() {
		int y = 200;

		UsuarioView usuario = getUsuarioView(usuarioDni);
		String[] values = {
				usuario.getDni(),
				usuario.getNombre(),
				usuario.getApellido(),
				usuario.getDomicilio(),
				usuario.getTelefono(),
				"(" + String.valueOf(numeroLibreView.getCodPais()) + ")"
						+ String.valueOf(numeroLibreView.getCodArea()) + "-"
						+ String.valueOf(numeroLibreView.getNumero()) };

		for (int i = 0; i < labels.length; i++) {
			generateLabel(labels[i] + ": " + values[i], 21, y);
			y += 50;
		}

	}

	private void generateLabel(String label, int x, int y) {
		{
			JLabel jLabel = new JLabel();
			jLabel.setText(label);
			jLabel.setBounds(x, y, 300, 28);
			getContentPane().add(jLabel);
		}

	}
}
